//package com.example.wechat.controller;
//
//import com.example.wechat.model.WechatMessage;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.ResponseEntity;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.File;
//import java.io.IOException;
//import java.nio.file.Files;
//import java.nio.file.Path;
//import java.nio.file.Paths;
//import java.security.Principal;
//import java.time.LocalDateTime;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
//@RestController
//@RequestMapping("/api/upload")
//public class FileUploadController {
//
//	@Value("${file.upload-dir:./uploads}")
//	private String uploadDir;
//
//	@Autowired
//	private SimpMessagingTemplate messagingTemplate;
//
//	@Autowired
//	private com.example.wechat.mapper.WeChatMapper messageRepository;
//
//	/**
//	 * 上传文件
//	 */
//	@PostMapping("/file")
//	public ResponseEntity<Map<String, Object>> uploadFile(@RequestParam("file") MultipartFile file,
//			@RequestParam("to") String toUser, Principal principal) {
//		try {
//			// 创建上传目录
//			File uploadPath = new File(uploadDir);
//			if (!uploadPath.exists()) {
//				uploadPath.mkdirs();
//			}
//
//			// 生成唯一文件名
//			String originalFilename = file.getOriginalFilename();
//			String fileExtension = "";
//			if (originalFilename != null && originalFilename.contains(".")) {
//				fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
//			}
//			String uniqueFileName = UUID.randomUUID().toString() + fileExtension;
//
//			// 保存文件
//			Path filePath = Paths.get(uploadDir, uniqueFileName);
//			Files.copy(file.getInputStream(), filePath);
//
//			// 创建消息记录
//			WechatMessage message = new WechatMessage();
//			message.setFromUser(principal.getName());
//			message.setMessageType(3); // 文件消息
//			message.setContent("文件消息");
//			message.setFileName(originalFilename);
//			message.setFileUrl("/uploads/" + uniqueFileName);
//			message.setFileSize(file.getSize());
//			message.setSendTime(LocalDateTime.now());
//			message.setIsRead(0);
//			message.setIsRecalled(0);
//			message.setCreateTime(LocalDateTime.now());
//			message.setUpdateTime(LocalDateTime.now());
//			message.setDelFlag(0);
//
//			// 保存到数据库
//			messageRepository.insertWechatMessage(message);
//
//			// 发送WebSocket消息
//			messagingTemplate.convertAndSendToUser(toUser, "/queue/private", message);
//			messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/private", message);
//
//			Map<String, Object> result = new HashMap<>();
//			result.put("success", true);
//			result.put("message", message);
//			result.put("fileUrl", "/uploads/" + uniqueFileName);
//
//			return ResponseEntity.ok(result);
//
//		} catch (IOException e) {
//			Map<String, Object> result = new HashMap<>();
//			result.put("success", false);
//			result.put("error", "文件上传失败: " + e.getMessage());
//			return ResponseEntity.badRequest().body(result);
//		}
//	}
//
//	/**
//	 * 上传图片
//	 */
//	@PostMapping("/image")
//	public ResponseEntity<Map<String, Object>> uploadImage(@RequestParam("image") MultipartFile image,
//			@RequestParam("to") String toUser, Principal principal) {
//
//		try {
//			// 检查文件类型
//			String contentType = image.getContentType();
//			if (contentType == null || !contentType.startsWith("image/")) {
//				Map<String, Object> result = new HashMap<>();
//				result.put("success", false);
//				result.put("error", "请上传图片文件");
//				return ResponseEntity.badRequest().body(result);
//			}
//
//			// 创建上传目录
//			File uploadPath = new File(uploadDir);
//			if (!uploadPath.exists()) {
//				uploadPath.mkdirs();
//			}
//
//			// 生成唯一文件名
//			String originalFilename = image.getOriginalFilename();
//			String fileExtension = ".jpg";
//			if (originalFilename != null && originalFilename.contains(".")) {
//				fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
//			}
//			String uniqueFileName = UUID.randomUUID().toString() + fileExtension;
//
//			// 保存图片
//			Path imagePath = Paths.get(uploadDir, uniqueFileName);
//			Files.copy(image.getInputStream(), imagePath);
//
//			// 获取图片尺寸（简化处理，实际应该解析图片）
//			int width = 200;
//			int height = 200;
//
//			// 创建消息记录
//			WechatMessage message = new WechatMessage();
//			message.setFromUser(principal.getName());
//			message.setTo(toUser);
//			message.setMessageType(2); // 图片消息
//			message.setContent("[图片]");
//			message.setFileName(originalFilename);
//			message.setFileUrl("/uploads/" + uniqueFileName);
//			message.setFileSize(image.getSize());
//			message.setImageWidth(width);
//			message.setImageHeight(height);
//			message.setSendTime(LocalDateTime.now());
//			message.setIsRead(0);
//			message.setIsRecalled(0);
//			message.setCreateTime(LocalDateTime.now());
//			message.setUpdateTime(LocalDateTime.now());
//			message.setDelFlag(0);
//
//			// 保存到数据库
//			messageRepository.insertWechatMessage(message);
//
//			// 发送WebSocket消息
//			messagingTemplate.convertAndSendToUser(toUser, "/queue/private", message);
//			messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/private", message);
//
//			Map<String, Object> result = new HashMap<>();
//			result.put("success", true);
//			result.put("message", message);
//			result.put("imageUrl", "/uploads/" + uniqueFileName);
//
//			return ResponseEntity.ok(result);
//
//		} catch (IOException e) {
//			Map<String, Object> result = new HashMap<>();
//			result.put("success", false);
//			result.put("error", "图片上传失败: " + e.getMessage());
//			return ResponseEntity.badRequest().body(result);
//		}
//	}
//
//	/**
//	 * 获取文件信息
//	 */
//	@GetMapping("/file/{fileName}")
//	public ResponseEntity<byte[]> getFile(@PathVariable String fileName) {
//		try {
//			Path filePath = Paths.get(uploadDir, fileName);
//			byte[] fileBytes = Files.readAllBytes(filePath);
//
//			// 根据文件类型设置Content-Type
//			String contentType = Files.probeContentType(filePath);
//			if (contentType == null) {
//				contentType = "application/octet-stream";
//			}
//
//			return ResponseEntity.ok().header("Content-Type", contentType)
//					.header("Content-Disposition", "inline; filename=\"" + fileName + "\"").body(fileBytes);
//
//		} catch (IOException e) {
//			return ResponseEntity.notFound().build();
//		}
//	}
//
//	/**
//	 * 检查文件上传目录配置
//	 */
//	@GetMapping("/config")
//	public ResponseEntity<Map<String, Object>> getUploadConfig() {
//		Map<String, Object> config = new HashMap<>();
//		config.put("uploadDir", uploadDir);
//		config.put("maxFileSize", "10MB");
//		config.put("allowedTypes", new String[] { "image/*", "application/pdf", "text/plain" });
//
//		return ResponseEntity.ok(config);
//	}
//}